/**
 * axios 封装
 */
import axios from "axios";
import {
	getTokenLocal
} from "@/utils/auth.js";
import {
	showLoadingToast,
	showDialog
} from 'vant';

// 配置信息
const config = {
	withCredentials: true, // send cookies when cross-domain requests
	baseURL: import.meta.env.VITE_APIDomainName, // http://www.zjff495.cn:5050
	timeout: 5000 // 设定响应超时
};

// 创建一个 axios 实例
const service = axios.create(config);

let toast = null;

// 请求拦截器逻辑封装
const requestInterceptorSuccess = (config) => {
	const token = getTokenLocal();
	if (token) {
		config.headers.Authorization = token; // token的名字参见接口文档
	}

	// 在发送请求之前做些什么  
	toast = showLoadingToast({
		message: '加载中...',
		forbidClick: true,
	}); // 显示loading
	return config;
};

const requestInterceptorError = (error) => {
	toast && toast.close(); // 隐藏loading
	return Promise.reject(error);
};

// 响应拦截器逻辑封装
const responseInterceptorSuccess = (response) => {
	toast && toast.close(); // 隐藏loading
	const result = response.data; // 注意后端返回的数据格式 result = { code msg data }
	// 处理成功
	if (result.code === 1) { // 注意返回的code值的含义
		return Promise.resolve(result); // 返回成功  
	}
	// 处理Token错,需要重新登录
	if (result.code === 401) {
		// Token错,需要重新登录
		showDialog({
			title: "用户需要登录！",
			message: result.msg,
		});
		return Promise.reject(new Error(result.msg || "Token错,需要重新登录"));
	}
	// 处理其他错误
	showDialog({
		title: "响应错误",
		message: result.msg
	});
	return Promise.reject(new Error(result.msg || "未知的响应错误"));
};

const responseInterceptorError = (error) => {
	console.error("响应出错:" + error); // 控制台错误提示  
	toast && toast.close(); // 隐藏loading

	let errorMessage = '未知错误';
	if (axios.isCancel(error)) {
		errorMessage = '请求被取消';
	} else if (error.code === 'ECONNABORTED') {
		errorMessage = '请求超时，请稍后重试';
	} else if (error.response) {
		errorMessage = `请求失败，状态码: ${error.response.status}`;
	}

	showDialog({ // 全局错误提示
		title: "响应拦截器错误",
		message: errorMessage
	});
	return Promise.reject(error);
};

// 添加请求拦截器
service.interceptors.request.use(requestInterceptorSuccess, requestInterceptorError);

// 添加响应拦截器
service.interceptors.response.use(responseInterceptorSuccess, responseInterceptorError);

// 默认引出
export default service;